package com.cs.deviceManager.service;

import com.cs.deviceManager.domain.DevDeviceCommand;
import java.util.List;

/**
 * 设备指令Service接口
 * 提供间歇性设备控制指令的业务逻辑管理
 * 
 * @author zizige
 * @date 2025-06-30
 */
public interface IDevDeviceCommandService {
    /**
     * 查询设备指令
     * 
     * @param commandId 设备指令主键
     * @return 设备指令
     */
    public DevDeviceCommand selectDevDeviceCommandByCommandId(Long commandId);

    /**
     * 查询设备指令列表
     * 
     * @param devDeviceCommand 设备指令
     * @return 设备指令集合
     */
    public List<DevDeviceCommand> selectDevDeviceCommandList(DevDeviceCommand devDeviceCommand);

    /**
     * 新增设备指令
     * 
     * @param devDeviceCommand 设备指令
     * @return 结果
     */
    public int insertDevDeviceCommand(DevDeviceCommand devDeviceCommand);

    /**
     * 修改设备指令
     * 
     * @param devDeviceCommand 设备指令
     * @return 结果
     */
    public int updateDevDeviceCommand(DevDeviceCommand devDeviceCommand);

    /**
     * 批量删除设备指令
     * 
     * @param commandIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDevDeviceCommandByCommandIds(String[] commandIds);

    /**
     * 删除设备指令信息
     * 
     * @param commandId 设备指令主键
     * @return 结果
     */
    public int deleteDevDeviceCommandByCommandId(Long commandId);

    /**
     * 创建新指令
     * 对应xx.md文档中指令管理模块的createCommand()关键流程
     * 
     * @param deviceId       设备ID
     * @param deviceNumber   设备编号
     * @param commandType    指令类型
     * @param commandContent 指令内容
     * @param maxRetryCount  最大重试次数
     * @return 创建的指令对象
     */
    public DevDeviceCommand createCommand(String deviceId, String deviceNumber, String commandType,
            String commandContent, Integer maxRetryCount);

    /**
     * 获取待执行指令
     * 对应xx.md文档中指令管理模块的getPendingCommand()关键流程
     * 
     * @param deviceId 设备ID
     * @return 待执行指令列表
     */
    public List<DevDeviceCommand> getPendingCommands(String deviceId);

    /**
     * 更新指令状态
     * 对应xx.md文档中指令管理模块的updateCommandStatus()关键流程
     * 
     * @param commandId 指令ID
     * @param status    新状态
     * @return 结果
     */
    public int updateCommandStatus(Long commandId, String status);

    /**
     * 查询设备是否活跃
     * 对应xx.md文档中设备状态模块的isDeviceActive()关键流程
     * 
     * @param deviceId 设备ID
     * @return 是否活跃
     */
    public boolean isDeviceActive(String deviceId);

    /**
     * 检查设备超时
     * 对应xx.md文档中设备状态模块的checkDeviceTimeout()关键流程
     * 
     * @param deviceId 设备ID
     * @return 是否超时
     */
    public boolean checkDeviceTimeout(String deviceId);

    /**
     * 发送指令到设备
     * 对应xx.md文档中通信处理模块的sendCommandToDevice()关键流程
     * 
     * @param command 指令对象
     * @return 是否发送成功
     */
    public boolean sendCommandToDevice(DevDeviceCommand command);

    /**
     * 启动超时监控
     * 对应xx.md文档中超时重试模块的startTimeoutMonitor()关键流程
     * 
     * @param commandId 指令ID
     */
    public void startTimeoutMonitor(Long commandId);

    /**
     * 处理指令超时
     * 对应xx.md文档中超时重试模块的handleCommandTimeout()关键流程
     * 
     * @param commandId 指令ID
     */
    public void handleCommandTimeout(Long commandId);

    /**
     * 执行指令重试
     * 对应xx.md文档中超时重试模块的retryCommand()关键流程
     * 
     * @param commandId 指令ID
     * @return 是否重试成功
     */
    public boolean retryCommand(Long commandId);
    
    /**
     * 标记设备为活跃状态
     * 对应xx.md文档中设备状态模块的markDeviceActive()关键流程
     * 
     * @param deviceId 设备ID
     * @return 是否标记成功
     */
    public boolean markDeviceActive(String deviceId);
    
    /**
     * 处理设备数据
     * 对应xx.md文档中通信处理模块的handleDeviceData()关键流程
     * 
     * @param deviceId 设备ID
     * @param data 设备数据
     * @return 处理结果
     */
    public boolean handleDeviceData(String deviceId, String data);
    
    /**
     * 处理连接异常
     * 对应xx.md文档中通信处理模块的handleConnectionLost()关键流程
     * 
     * @param deviceId 设备ID
     */
    public void handleConnectionLost(String deviceId);
}